/**
 * 
 */
package xplayer.presenter;

import application.tools.ActionTool;
import application.tools.InfoTool;
import eu.hansolo.enzo.common.SymbolType;
import eu.hansolo.enzo.radialmenu.RadialMenu;
import eu.hansolo.enzo.radialmenu.RadialMenuBuilder;
import eu.hansolo.enzo.radialmenu.RadialMenuItem;
import eu.hansolo.enzo.radialmenu.RadialMenuItemBuilder;
import eu.hansolo.enzo.radialmenu.RadialMenuOptionsBuilder;
import javafx.scene.Cursor;
import javafx.scene.paint.Color;

/**
 * @author GOXR3PLUS
 *
 */
public class XPlayerRadialMenu {
	
	/** The next pressed. */
	private boolean nextPressed;
	
	/** The previous pressed. */
	private boolean previousPressed;
	
	//
	private RadialMenu radialMenu;
	
	//
	RadialMenuItem stop = RadialMenuItemBuilder.create().symbol(SymbolType.STOP).tooltip("Stop").size(40).build();
	RadialMenuItem play = RadialMenuItemBuilder.create().symbol(SymbolType.PLAY).tooltip("Play").size(40).build();
	RadialMenuItem pause = RadialMenuItemBuilder.create().symbol(SymbolType.PAUSE).tooltip("Pause").size(40).build();
	RadialMenuItem mute = RadialMenuItemBuilder.create().selectable(true).selected(false).thumbnailImageName(getClass().getResource(InfoTool.IMAGES + "mute.png").toExternalForm())
			.tooltip("Mute").size(40).build();
	
	//
	RadialMenuItem refresh = RadialMenuItemBuilder.create().symbol(SymbolType.REFRESH).tooltip("Refresh").size(40).build();
	RadialMenuItem search = RadialMenuItemBuilder.create().symbol(SymbolType.SEARCH).tooltip("Search").size(40).build();
	
	//
	RadialMenuItem next = RadialMenuItemBuilder.create().symbol(SymbolType.FORWARD).tooltip("Next").size(40).build();
	RadialMenuItem previous = RadialMenuItemBuilder.create().symbol(SymbolType.REWIND).tooltip("Previous").size(40).build();
	
	private final XPlayerController xPlayerController;
	
	/**
	 * Constructor
	 * 
	 * @param xPlayerController
	 * 
	 */
	public XPlayerRadialMenu(XPlayerController xPlayerController) {
		this.xPlayerController = xPlayerController;
		
		//----------------RadialMenu
		radialMenu = RadialMenuBuilder.create().options(RadialMenuOptionsBuilder.create().degrees(360).buttonFillColor(Color.BLUE).offset(-125 - 55) //-135 with next and previous + 350 degrees //-160 with 360 degrees
				.radius(60).buttonSize(40).tooltipsEnabled(true).buttonHideOnSelect(false).buttonHideOnClose(false).buttonAlpha(1.0).build()).items(
						//RadialMenuItemBuilder.create().thumbnailImageName(getClass().getResource("star.png").toExternalForm()).size(40).build(),
						previous, stop, play, pause,
						//next, 
						next, refresh, mute, search
		//previous
		).build();
		
		//radialMenu.setStyle("-fx-background-color:magenta;")
		previous.setDisable(true);
		next.setDisable(true);
		//radialMenu.pref
		radialMenu.setPickOnBounds(false);
		radialMenu.setCursor(Cursor.HAND);
		if (xPlayerController.getKey() == 0)
			radialMenu.open();
		
		//--disable the bitches
		//radialMenu.hide()
		next.setDisable(true);
		previous.setDisable(true);
		
		//--Click
		radialMenu.setOnItemClicked(clickEvent -> {
			
			if (clickEvent.item == stop)
				xPlayerController.getxPlayer().stop();
			else if (clickEvent.item == play)
				xPlayerController.playOrReplay();
			else if (clickEvent.item == pause)
				xPlayerController.pause();
			if (clickEvent.item == refresh)
				xPlayerController.replay();
			else if (clickEvent.item == search)
				xPlayerController.openAudioInExplorer();
		});
		
		//	radialMenu.setOnMenuOpenStarted(menuEvent -> System.out.println("Menu starts to open"));
		//	radialMenu.setOnMenuOpenFinished(menuEvent -> System.out.println("Menu finished to open"));
		//	radialMenu.setOnMenuCloseStarted(menuEvent -> System.out.println("Menu starts to close"));
		//	radialMenu.setOnMenuCloseFinished(menuEvent -> System.out.println("Menu finished to close"));
		//		radialMenu.setOnItemSelected(selectionEvent -> {
		//			if (selectionEvent.item == mute)
		//				xPlayerController.getxPlayer().setMute(true);
		//		});
		//		radialMenu.setOnItemDeselected(selectionEvent -> {
		//			if (selectionEvent.item == mute)
		//				xPlayerController.getxPlayer().setMute(false);
		//		});
		
	}
	
	/**
	 * @return The RadialMenuButton
	 */
	public RadialMenu getRadialMenuButton() {
		return radialMenu;
	}
	
	/**
	 * @return True if the RadialMenu is Hidden or false if not
	 */
	public boolean isHidden() {
		return radialMenu.getOpacity() == 0.0;
	}
	
	/**
	 * This method is used to go on next song.
	 */
	public void goNext() {
		//	if (!next.isDisable()) {
		//	    nextPressed = true;
		//	    previousPressed = false;
		//	}
	}
	
	/**
	 * This method is used to go on next song.
	 */
	public void goPrevious() {
		//	if (!previous.isDisable()) {
		//	    nextPressed = false;
		//	    previousPressed = true;
		//	}
	}
	
	/**
	 * Determines if the next has been pressed.
	 *
	 * @return true, if successful
	 */
	public boolean nextHasBeenPressed() {
		return nextPressed;
	}
	
	/**
	 * Determines if the previous has been pressed.
	 *
	 * @return true, if successful
	 */
	public boolean previousHasBeenPressed() {
		return previousPressed;
	}
	
	/**
	 * Resets nextPressed and previousPressed to false.
	 */
	public void resetPreviousAndNextIfPressed() {
		nextPressed = false;
		previousPressed = false;
	}
	
}
